//decorator 修饰器
//  修饰器，是一个函数，用来修改『类』的行为，扩展『类』的功能。

//  还需要打补丁才能使用哦，，babel-plugin-transform-decotators-legacy

// 第三方库修饰器的js库：core-decorators; npm install core-decorators
{
    let readonly=function(target,name,descriptor){   //修饰器对应的方法
        descriptor.writable=false;
        return descriptor
    };

    class Test{
        @readonly                                       //对类属性进行限制--在内部
        time(){
            return '2017-03-11'
        }
    }

    let test=new Test();

    // test.time=function(){
    //   console.log('reset time');
    // };

    console.log(test.time());
}


{
    let typename=function(target,name,descriptor){
        target.myname='hello';                          //类的『静态属性』
    }

    @typename                                         //对类进行修饰，『增加静态属性』  -- 所以在外部
    class Test{

    }

    console.log('类修饰符',Test.myname);
    // 第三方库修饰器的js库：core-decorators; npm install core-decorators
}


//-----------------------------
//  买点  ：  点击 和 展示
//-----------------------------
{
    let log=(type)=>{                                   //type是log函数的参数
        return function(target,name,descriptor){        //修饰器对应的方法
            let src_method=descriptor.value;            //一个修饰器根据传递来的参数的不同，
            descriptor.value=(...arg)=>{
                src_method.apply(target,arg);
                console.info(`log ${type}`);
            }
        }
    }

    class AD{
        @log('show')
        show(){
            console.info('ad is show')
        }
        @log('click')
        click(){
            console.info('ad is click');
        }
    }

    let ad=new AD();
    ad.show();
    ad.click();
}
